<!DOCTYPE html>
<html>
<body>
<canvas id='output' width='200' height='400'></canvas>
<script id='myWorker' type='text/worker'>
self.onmessage = function(e) {
    var aCanvas = new OffscreenCanvas(200, 400);
    var ctx = aCanvas.getContext('2d');

    ctx.beginPath();
    ctx.lineWidth = '10';
    ctx.strokeStyle = 'green';
    ctx.lineJoin = 'round';
    ctx.moveTo(15, 15);
    ctx.lineTo(135, 15);
    ctx.lineTo(70, 170);
    ctx.closePath();
    ctx.stroke();

    var path1 = new Path2D();
    path1.moveTo(150, 25);
    path1.bezierCurveTo(10, 150, 10, 300, 100, 200);
    ctx.strokeStyle = 'purple';
    ctx.setLineDash([ 10, 5 ]);
    ctx.stroke(path1);

    ctx.fillStyle = 'red';
    ctx.beginPath()
    ctx.arc(75, 325, 50, 0, Math.PI * 2, true);
    ctx.arc(75, 325, 20, 0, Math.PI * 2, true);
    ctx.fill("evenodd");

    var image = aCanvas.transferToImageBitmap();
    self.postMessage(image, [image]);
};
</script>
<script>
if (window.testRunner) {
  testRunner.waitUntilDone();
}
var blob = new Blob([document.getElementById('myWorker').textContent]);
var worker = new Worker(URL.createObjectURL(blob));
worker.addEventListener('message', msg => {
  var outputCtx = document.getElementById('output').getContext('bitmaprenderer');
  outputCtx.transferFromImageBitmap(msg.data);
  if (window.testRunner) {
    testRunner.notifyDone();
  }
});
worker.postMessage("");
</script>
</body>
</html>
